﻿<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title> ObjectiveC 代码例子</title>
</head>

<body>
  <table border="1">
    <tr>
      <td>A0001_NSNumber</td>
      <td> NSNumber 类 与基础数据类型 int、long、char、float、double 之间的转换处理例子。  </td>
    </tr>

	<tr>
      <td>A0011_String</td>
      <td>
	    最简单的 NSString 使用。 简单的定义 与 输出。
	  </td>
    </tr>

	<tr>
      <td>A0012_String</td>
      <td>
	    简单的 NSString 的 长度、复制、追加、比较、大小写转换的例子。
	  </td>
    </tr>

	<tr>
      <td>A0013_String</td>
      <td>简单的 NSString 的 substring（FromIndex、ToIndex、WithRange）与 rangeOfString 处理的例子。 </td>
    </tr>

	<tr>
      <td>A0014_String</td>
      <td>NSMutableString 类中，对字符串的 插入、追加、查找、替换 等操作的例子。 </td>
    </tr>

	<tr>
      <td>A0021_Array</td>
      <td>演示一个最简单的 NSArray 类的初始化，以及元素数据获取的例子。 </td>
    </tr>

	<tr>
      <td>A0022_Array</td>
      <td>通过一个求 50 以内质数的例子，来演示 NSMutableArray 类使用的例子。 </td>
    </tr>

	<tr>
      <td>A0023_Array</td>
      <td>本例子代码，为后面例子的一个中间过程代码。 新建一个 AddressCard 类，用于后面的数组，来保存这 对象类型的数据。 </td>
    </tr>

	<tr>
      <td>A0024_Array</td>
      <td>
	  本例子代码，为后面例子的一个中间过程代码。 主要增加了类的 dealloc 方法。 用于释放类资源的时候，释放成员变量所占用的资源。
	  </td>
    </tr>

	<tr>
      <td>A0025_Array</td>
      <td>
	  通过 AddressBook 类，来处理，将 AddressCard 对象的数据，加入 NSMutableArray 数组，以及遍历数组处理的例子。
	  </td>
    </tr>


	<tr>
      <td>A0026_Array</td>
      <td>
	  通过 AddressBook 类，来处理 在 NSMutableArray 数组中，查询数据 （不区分大小写） 的例子。
	  </td>
    </tr>


	<tr>
      <td>A0027_Array</td>
      <td>
	  通过 AddressBook 类，来处理 在 NSMutableArray 数组中，删除 元素 的处理。
	  </td>
    </tr>


	<tr>
      <td> A0028_Array </td>
      <td>
	  演示 NSMutableArray 数组的 sortUsingSelector 方法，来进行排序的处理。
	  </td>
    </tr>

	<tr>
      <td> A0031_Dictionary </td>
      <td>
<pre><code>
NSMutableDictionary 的使用的例子。
包含
	向 Dictionary 中加入 Key-Value， 
	从 Dictionary 中 传入 Key 返回 Value 。
</code></pre>
	  </td>
    </tr>

	<tr>
      <td> A0032_Dictionary </td>
      <td>
<pre><code>
NSDictionary 的使用的例子。
包含
	初始化一个 NSDictionary， 
	与 获取 NSDictionary 中全部的 Key 信息的例子（也就是遍历 NSDictionary 的例子 ）
</code></pre>
	  </td>
    </tr>


	<tr>
      <td> A0041_Set  </td>
      <td>
<pre><code>
基本的 Set 处理的例子。 
包含：
	初始化、
	比较、
	包含、
	添加、
	删除、
	intersection 与 union 的处理。
</code></pre>
	  </td>
    </tr>





	<tr>
      <td> A0101_File </td>
      <td>
<pre><code>
基本的 NSFileManager 类的处理例子。
包含：
	判断文件是否存在、
	复制文件、
	判断文件内容是否一致、
	文件重命名、
	获取文件信息、
	删除文件 的处理。
</code></pre>
	  </td>
    </tr>


	<tr>
      <td> A0102_File </td>
      <td>
<pre><code>
基本的 NSFileManager 类的处理例子。
包含：
	读取文件内容到 NSData 对象中，
	以及 在创建文件时，将 NSData 的内容同时写入的处理。
</code></pre>
	  </td>
    </tr>


	<tr>
      <td> A0103_File </td>
      <td>
<pre><code>
基本的 NSFileManager 类的处理例子。
包含：
	取得当前路径、
	创建路径、
	重命名路径、
	变更当前路径的处理。
</code></pre>
	  </td>
    </tr>


	<tr>
      <td> A0104_File </td>
      <td>
<pre><code>
基本的 NSFileManager 类的处理例子。
包含：
	遍历 当前目录下的所有 内容的处理 
	（包含子路径 与 不包含子路径）
</code></pre>
	  </td>
    </tr>

	
	<tr>
      <td> A0111_Path </td>
      <td>
<pre><code>
基本的 目录 的处理例子。
包含：
	取得 当前目录、
	临时目录、Home 目录 的处理， 
	全路径、
	最后路径、
	路径中每个节点获取、
	文件扩展名获取、
	相对路径与绝对路径转换的处理。
</code></pre>
	  </td>
    </tr>

	<tr>
      <td> A0112_Path </td>
      <td>
<pre><code>
基本的 进程处理信息、目录、文件 的处理例子。
包含：
	取得进程信息、
	取得传入参数 
	判断文件是否可读、 
	检测 文件/目录 是否存在，
	以及如果存在的话，是文件还是目录的判断、
	文件删除的处理 与 文件复制的处理
</code></pre>
	  </td>
    </tr>


	<tr>
      <td> A0121_FileHandle  </td>
      <td>
<pre><code>
基本的 NSFileHandle 类的使用例子。
包含：
	打开文件(用于读取)、 
	读取数据到 NSData 、 
	打开文件(写入写入)、
	调整写入文件的指针、
	将 NSData 数据写入文件。
</code></pre>
	  </td>
    </tr>

	<tr>
      <td> A0122_FileHandle </td>
      <td>
<pre><code>
基本的 NSFileHandle 类的使用例子。
包含：
	打开文件(用于读取)、 
	读取数据到 NSData 、 
	打开文件(写入写入)、 
	文件指针移动到文件末尾、
	将 NSData 数据写入文件。
</code></pre>
	  </td>
    </tr>


	<tr>
      <td> A0131_Reference </td>
      <td>
<pre><code>
基本的 内存管理的处理逻辑的例子。
包含：
	关于 调用 retain 与 release 方法，来实现 增加 与 删除 引用。
	以及 加入 数组，自动增加 引用的处理。
</code></pre>
	  </td>
    </tr>


	<tr>
      <td> A0132_Reference </td>
      <td>
<pre><code>
内存管理的处理逻辑。
包含：
	关于 调用 retain 与 release 方法，来实现 增加 与 删除 引用。
	以及 加入 数组，自动增加 引用的处理。
	一个特殊的情况，是 NSString *myStr1 = @"Constant string";
	这样的 静态方式定义的，是没有引用处理的。
</code></pre>
	  </td>
    </tr>


	<tr>
      <td> A0133_Reference </td>
      <td>
<pre><code>
一个自定义类的内存管理
包含：
	没有做内部属性的 retain 与 release 处理的例子.
	这个类 需要自己进行 release 的处理. (不推荐以这种方式写代码)
</code></pre>
	  </td>
    </tr>

	<tr>
      <td> A0134_Reference </td>
      <td>
<pre><code>
一个自定义类的内存管理
包含：
	做了内部属性的 retain 处理的例子.
	这个类 需要自己进行 release 的处理. (不推荐以这种方式写代码)
</code></pre>
	  </td>
    </tr>

	<tr>
      <td> A0135_Reference </td>
      <td>
<pre><code>
一个自定义类的内存管理
包含：
	做了内部属性的 retain 处理的例子
	这个类 定义了 dealloc 方法。
	使得调用程序，可以使用 autorelease 方法，
	让该类由 NSAutoreleasePool 来自动释放该类的资源
</code></pre>
	  </td>
    </tr>


	<tr>
      <td> A0141_AutoreleasePool </td>
      <td>
<pre><code>
演示 NSAutoreleasePool 的使用过程。
包含：
	调用 autorelease 方法 
	不调用 autorelease 方法
</code></pre>
	  </td>
    </tr>



	<tr>
      <td> A0151_Copy </td>
      <td>
<pre><code>
演示 数组 的 Copy 处理。 
包含：
	数组的 简单赋值 
	mutableCopy.
</code></pre>
	  </td>
    </tr>

	<tr>
      <td> A0152_Copy </td>
      <td>
<pre><code>
用于演示 数组 的 Copy 处理。
包含：
	例子演示的结果，是显示出 数组的 mutableCopy 只是一个 浅层的复制.
	复制后的 数组是 新的了。
	但是 数组中的 对象的引用，还是一样的。
	开发中需要注意 避免 浅层复制后，直接通过 方法来修改 数组中元素的属性内容。
</code></pre>
	  </td>
    </tr>


	<tr>
      <td> A0153_Copy </td>
      <td>
<pre><code>
用于演示 自定义类的 的 Copy 处理。
包含：
	对于自己写的类，如果需要实现 copy 的处理。
	那么需要实现 NSCopying Protocols 也就是 interface 定义的时候。
	要写成 AddressCard: NSObject <NSCopying>
	然后类里面 实现 -(id) copyWithZone: (NSZone *) zone 方法.
</code></pre>
	  </td>
    </tr>



	<tr>
      <td> A0161_Archiving </td>
      <td>
<pre><code>
用于演示， 调用 writeToFile 方法， 将类中的数据，写入文件。
包含：
	然后用 dictionaryWithContentsOfFile 方法，根据文件中的数据，构造一个新的类.
	这个功能， 可以模糊的认为，相当于 C#与Java中的 序列化操作。
	也就是将 类中的数据， 保存到一个 数据文件中。
	如果需要的话，再从数据文件中，读取信息，构造一个类.
</code></pre>
	  </td>
    </tr>

	<tr>
		<td> A0162_Archiving </td>
		<td>
<pre><code>
用于演示， 调用 NSArchiver archiveRootObject: toFile: 方法， 将类中的数据，写入文件。
然后用 NSUnarchiver unarchiveObjectWithFile 方法，根据文件中的数据，构造一个新的类.

这个功能， 可以模糊的认为，相当于 C#与Java中的 序列化操作。
也就是将 类中的数据， 保存到一个 数据文件中。
如果需要的话，再从数据文件中，读取信息，构造一个类.

A0162_Archiving 与 A0161_Archiving 的区别在于
所产生的文件格式不同。
A0161_Archiving 产生的文件，是 可见的 文本类型的文件
A0162_Archiving 产生的文件，是 二进制格式的文件.
</code></pre>
		</td>
    </tr>

	<tr>
		<td> A0163_Archiving </td>
		<td>
<pre><code>
用于演示， 调用 NSArchiver archiveRootObject: toFile: 方法， 将类中的数据，写入文件。
然后用 NSUnarchiver unarchiveObjectWithFile 方法，根据文件中的数据，构造一个新的类.

A0163_Archiving 与 A0162_Archiving 的区别在于
目标类不同
A0162_Archiving 是使用 系统自带的类，来 写入文件、读取文件。
A0163_Archiving 是使用 自定义的类，通过实现 NSCoding  Protocols
自己写好
-(void) encodeWithCoder: (NSCoder *) encoder 方法
与
-(id) initWithCoder: (NSCoder *) decoder 方法.
</code></pre>
		</td>
    </tr>


	<tr>
		<td> A0164_Archiving </td>
		<td>
<pre><code>
用于演示， 调用 NSArchiver archiveRootObject: toFile: 方法， 将类中的数据，写入文件。
然后用 NSUnarchiver unarchiveObjectWithFile 方法，根据文件中的数据，构造一个新的类.

A0164_Archiving 与 A0163_Archiving 的区别在于
A0163_Archiving 中的属性，都是 Objective-C 对象
A0164_Archiving 中的属性，包含 Objective-C 对象 与 标准的 C 基础数据类型.
</code></pre>
		</td>
    </tr>


	<tr>
		<td> A0165_Archiving </td>
		<td>
<pre><code>
用于演示， 在 encoder 与 decoder 方法中 。
通过 命名 关键字的方式，来进行 encoder 与 decoder 的处理.
注：GNUStep 不支持 通过关键字的方式来处理
因此，只能 按照 特定的顺序来处理。
</code></pre>
		</td>
    </tr>


	<tr>
      <td> A0166_Archiving </td>
      <td>
<pre><code>
用于演示， 一次性，将多个没有关系的 对象，
通过 NSKeyedArchiver 写入 NSMutableData
然后 NSMutableData 将内存数据，写入 文件。

然后再从文件，把数据加载到 NSData
然后再通过 NSKeyedUnarchiver 从 NSData 中，提取出 没有关系的对象数据.
</code></pre>
	  </td>
    </tr>


	<tr>
      <td> A0167_Archiving </td>
      <td>
<pre><code>
用于演示， 通过使用 Archiving 技术，来实现  深层次的 Copy 功能
也就是 对于一个数组。
浅层的 克隆，仅仅是 新建一个数组结构，内部的引用还是 共享的，指向同一个对象.
深层的 克隆，不但数据结构新建了，数组中的元素，也新建了。
</code></pre>
	  </td>
    </tr>


	<tr>
		<td> A1001_Basic </td>
		<td>
		基本类定义格式.

<pre><code>
用于演示基本的 类的定义方式：
也就是 一个类， 需要由 @interface部分 与 @implementation部分 来组成.
</code></pre>
		</td>
	</tr>


	<tr>
		<td> A1002_Basic </td>
		<td>
		基本类定义格式.

<pre><code>
用于演示基本的 类方法的定义方式：
主要用于演示  静态方法(+)、实例方法(-)
以及 0参数、1参数、多参数的情况.
</code></pre>
		</td>
	</tr>

	<tr>
		<td> A1003_Basic </td>
		<td>
		基本类定义格式.

<pre><code>
用于演示基本的 类 属性的定义.
( 由于  @property  在 GNUstep下 暂时编译不通过， 估计是环境问题)
</code></pre>
		</td>
	</tr>

	<tr>
		<td> A1004_Basic </td>
		<td>
		基本类定义格式.

<pre><code>
用于演示基本的 类 属性的定义.
不使用 @property，  暂时使用手写的  set/get
</code></pre>

		</td>
	</tr>

	<tr>
		<td> A1011_Extends </td>
		<td>
		  简单的继承例子.
		</td>
	</tr>

	<tr>
		<td> A1021_ID </td>
		<td> 动态绑定和id类型  </td>
	</tr>


	<tr>
		<td> A1031_CATEGORY_PROTOCOL </td>
		<td>
		分类和协议
<pre><code>
分类(category)可以以模块的方式向现有的类添加方法。
协议的声明类似于类接口的声明，有一点不同的是，协议没有父类，并且不能定义成员变量。
</code></pre>
	</tr>




	<tr>
		<td> </td>
		<td>  </td>
	</tr>

	<tr>
		<td> </td>
		<td>  </td>
	</tr>
	<tr>
		<td> </td>
		<td>  </td>
	</tr>

  </table>
</body>
</html>